package com.bbs.config;

import com.bbs.common.Constants;
import com.bbs.interceptor.MyBBSLoginInterceptor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@Configuration
public class MyBBSWebMvcConfigurer implements WebMvcConfigurer {

    /**
     * 添加拦截器配置。
     * 该方法用于注册一个拦截器，以拦截特定的URL请求，并对请求进行预处理或后处理。
     * 拦截器MyBBSLoginInterceptor用于实现论坛的登录验证功能，确保未登录的用户不能访问特定的论坛资源。
     * 通过excludePathPatterns排除了不需要登录验证的URL，如注册、登录页面；通过addPathPatterns指定了需要登录验证的URL，如用户中心、发帖、收藏等操作。
     *
     * @param registry InterceptorRegistry实例，用于注册拦截器和配置拦截器的路径规则。
     */
    @Autowired
    private MyBBSLoginInterceptor myBBSLoginInterceptor;

    public void addInterceptors(InterceptorRegistry registry) {
        // 登陆拦截
        registry.addInterceptor(myBBSLoginInterceptor)
                .excludePathPatterns("/register")
                .excludePathPatterns("/login")
                .addPathPatterns("/logout")
                .addPathPatterns("/addPostPage")
                .addPathPatterns("/addPost")
                .addPathPatterns("/addCollect/**")
                .addPathPatterns("/editPostPage/**")
                .addPathPatterns("/editPost")
                .addPathPatterns("/detail/**")
                .addPathPatterns("/uploadFile")
                .addPathPatterns("/uploadFiles")
                .addPathPatterns("/updateUserInfo")
                .addPathPatterns("/updateHeadImg")
                .addPathPatterns("/updatePassword")
                .addPathPatterns("/userCenter")
                .addPathPatterns("/userCenter/**")
                .addPathPatterns("/myCenter")
                .addPathPatterns("/userSet");
    }

    /**
     * 添加静态资源处理器配置。
     * 该方法用于配置Spring Boot对静态资源的处理，特别是对上传文件的路径进行配置，确保服务器能够正确地找到并返回这些静态资源。
     *
     * @param registry ResourceHandlerRegistry实例，用于注册静态资源处理器和配置资源的位置。
     */
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/upload/**").addResourceLocations("file:" + Constants.FILE_UPLOAD_DIC);
    }

}
